home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / MacHacksBug / Python 1.5.2c1 / Extensions / Imaging / PIL / PcdImagePlugin.py < prev    next >
Encoding:
Text File  |  2000-06-23  |  1.4 KB  |  73 lines

  1. #
  2. # The Python Imaging Library.
  3. # $Id: PcdImagePlugin.py,v 1.1.1.1 1998/08/18 13:07:53 sjoerd Exp $
  4. #
  5. # PCD file handling
  6. #
  7. # History:
  8. #    96-05-10 fl    Created
  9. #    96-05-27 fl    Added draft mode (128x192, 256x384)
  10. #
  11. # Copyright (c) Secret Labs AB 1997.
  12. # Copyright (c) Fredrik Lundh 1996.
  13. #
  14. # See the README file for information on usage and redistribution.
  15. #
  16.  
  17.  
  18. __version__ = "0.1"
  19.  
  20.  
  21. import Image, ImageFile
  22.  
  23.  
  24. class PcdImageFile(ImageFile.ImageFile):
  25.  
  26.     format = "PCD"
  27.     format_description = "Kodak PhotoCD"
  28.  
  29.     def _open(self):
  30.  
  31.     # rough
  32.     self.fp.seek(2048)
  33.     s = self.fp.read(2048)
  34.  
  35.     if s[:4] != "PCD_":
  36.         raise SyntaxError, "not a PCD file"
  37.  
  38.     orientation = ord(s[1538]) & 3
  39.     if orientation == 1:
  40.         self.tile_post_rotate = 90 # hack
  41.     elif orientation == 3:
  42.         self.tile_post_rotate = -90
  43.  
  44.     self.mode = "RGB"
  45.     self.size = 768, 512 # FIXME: not correct for rotated images!
  46.     self.tile = [("pcd", (0,0)+self.size, 96*2048, None)]
  47.  
  48.     def draft(self, mode, size):
  49.  
  50.     if len(self.tile) != 1:
  51.         return
  52.  
  53.     d, e, o, a = self.tile[0]
  54.  
  55.     if size:
  56.         scale = max(self.size[0] / size[0], self.size[1] / size[1])
  57.         for s, o in [(4,0*2048), (2,0*2048), (1,96*2048)]:
  58.         if scale >= s:
  59.             break
  60.         # e = e[0], e[1], (e[2]-e[0]+s-1)/s+e[0], (e[3]-e[1]+s-1)/s+e[1]
  61.         # self.size = ((self.size[0]+s-1)/s, (self.size[1]+s-1)/s)
  62.  
  63.     self.tile = [(d, e, o, a)]
  64.  
  65.     return self
  66.  
  67. #
  68. # registry
  69.  
  70. Image.register_open("PCD", PcdImageFile)
  71.  
  72. Image.register_extension("PCD", ".pcd")
  73.